package main; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.util.Iterator; import java.util.Set; import IO.*; import models.Account; import models.Bank; import models.Person; import models.SavingAccount; import test.Test; public class Controller implements ActionListener { private static final int LOG_IN = 0; private static final int ADMIN = 1; private static final int GUEST = 2; private int CURRENT_FRAME = LOG_IN; private Bank bank; private LogInFrame logInFrame; private AdminFrame adminFrame; private CustomerFrame customerFrame; public Controller(LogInFrame logInFrame) throws Exception { new Test(); this.logInFrame = logInFrame; this.logInFrame.logInOutButton.addActionListener(this); adminFrame = null; customerFrame = null; //bank = new Bank(); //if not-deserialization deserialization(); // bank } @Override public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == logInFrame.logInOutButton) { if (logInFrame.selectedUser.equals(LogInFrame.ADMIN)) { // instantiate // adminFrame CURRENT_FRAME = ADMIN; logInFrame.frame.setVisible(false); adminFrame = new AdminFrame(bank); adminFrame.logInOutButton.addActionListener(this); adminFrame.searchFilterButton.addActionListener(this); adminFrame.addAccountButton.addActionListener(this); adminFrame.addHolderButton.addActionListener(this); adminFrame.removeHolderButton.addActionListener(this); adminFrame.tableAdmin.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { int auxRow = adminFrame.tableAdmin.rowAtPoint(evt.getPoint()); int auxCol = adminFrame.tableAdmin.columnAtPoint(evt.getPoint()); if (auxRow >= 0 && auxCol >= 0) { if (auxCol == 5) { // REMOVE ACCOUNT Set<Person> holders = bank.getHolders(); Iterator<Person> iterator = holders.iterator(); while (iterator.hasNext()) { // iterate holders Person auxP = iterator.next(); if (auxP.ID.equals(adminFrame.tableAdmin.getValueAt(auxRow, 0))) { Set<Account> accounts = bank.getAccounts(auxP); Iterator<Account> iterator2 = accounts.iterator(); while (iterator2.hasNext()) { Account auxA = iterator2.next(); if (auxA.ID.equals(adminFrame.tableAdmin.getValueAt(auxRow, 2))) { bank.removeAccount(auxP, auxA); adminFrame.updateTable(bank); serialization(); break; } } break; } } } } } }); } else if (logInFrame.selectedUser.equals(LogInFrame.GUEST)) { // instantiate // customerFrame CURRENT_FRAME = GUEST; Person loggedPerson = logInFrame.queryLogInCustomer(bank); if (loggedPerson == null) { logInFrame.errorMessageLogIn(); } else { logInFrame.frame.setVisible(false); Set<Account> accountsOfLoggedPerson = bank.getAccounts(loggedPerson); customerFrame = new CustomerFrame(loggedPerson, accountsOfLoggedPerson); customerFrame.logInOutButton.addActionListener(this); customerFrame.tableCustomer.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { int auxRow = customerFrame.tableCustomer.rowAtPoint(evt.getPoint()); int auxCol = customerFrame.tableCustomer.columnAtPoint(evt.getPoint()); if (auxRow >= 0 && auxCol >= 0) { if (auxCol == 3) { // WITHDRAW Account auxA = new SavingAccount("", 0); Iterator<Account> iterator2 = accountsOfLoggedPerson.iterator(); while (iterator2.hasNext()) { auxA = iterator2.next(); if (auxA.ID.equals(customerFrame.tableCustomer.getValueAt(auxRow, 0))) { break; } } double sum = customerFrame.queryForMoney(); bank.withdraw(sum, auxA.ID, loggedPerson); serialization(); customerFrame.updateTable(accountsOfLoggedPerson); } else if (auxCol == 4) { // DEPOSIT Account auxA = new SavingAccount("", 0); Iterator<Account> iterator2 = accountsOfLoggedPerson.iterator(); while (iterator2.hasNext()) { auxA = iterator2.next(); if (auxA.ID.equals(customerFrame.tableCustomer.getValueAt(auxRow, 0))) { break; } } double sum = customerFrame.queryForMoney(); bank.deposit(sum, auxA.ID, loggedPerson); serialization(); customerFrame.updateTable(accountsOfLoggedPerson); } } } }); } } } else if (CURRENT_FRAME == ADMIN && adminFrame != null) { if (source == adminFrame.logInOutButton) { CURRENT_FRAME = LOG_IN; adminFrame.frame.setVisible(false); logInFrame.frame.setVisible(true); } else if (source == adminFrame.addAccountButton) { adminFrame.queryAddAccount(bank); adminFrame.updateTable(bank); serialization(); } else if (source == adminFrame.addHolderButton) { Person auxP = adminFrame.queryAddCustomer(bank); if(auxP != null){ bank.addHolder(auxP); System.out.println("holder added: " + auxP.toString()); adminFrame.updateTable(bank); serialization(); } else{ System.out.println("person is null"); } } else if (source == adminFrame.removeHolderButton) { boolean success = adminFrame.queryRemoveCustomer(bank); if(success == true){ //it was removed adminFrame.updateTable(bank); serialization(); } } else if (source == adminFrame.searchFilterButton) { adminFrame.updateTable(bank, adminFrame.jTextField.getText()); } } else if (CURRENT_FRAME == GUEST && customerFrame != null) { if (source == customerFrame.logInOutButton) { CURRENT_FRAME = LOG_IN; customerFrame.frame.setVisible(false); logInFrame.frame.setVisible(true); } } // event source = customer frame } private void deserialization() { try { FileInputStream fileIn1 = new FileInputStream("bank.ser"); ObjectInputStream in1 = new ObjectInputStream(fileIn1); bank = (Bank) in1.readObject(); in1.close(); fileIn1.close(); } catch (IOException i) { // FileNotFoundException i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("class not found"); c.printStackTrace(); return; } } private void serialization() { try { FileOutputStream fileOut1 = new FileOutputStream("bank.ser"); ObjectOutputStream out1 = new ObjectOutputStream(fileOut1); out1.writeObject(bank); out1.flush(); out1.close(); fileOut1.close(); System.out.printf("Serialized data is saved in /bank.ser"); } catch (IOException i) { i.printStackTrace(); } } }